################################################################################
# Procedure appelee a l'appui de la touche entree dans la zone de saisie
################################################################################
proc callback_envoyerMessage { } {
	# Recupere le message ecrit dans la zone de saisie via sa variable globale
	global var_messageEnvoye
	
	# Commande ou message?
	regexp {^/[a-zA-Z]*\s?.*} $var_messageEnvoye trouve
	
	if { [info exist trouve] == 1 } {
		proc_gestionCommande $var_messageEnvoye
	}	else	{
		proc_envoiMessage $var_messageEnvoye
	}
	
}


# Gestion des commandes en ligne
global var_listeCommandes

set var_listeCommandes(help) "help"
set var_listeCommandes(help,desc) "Affiche les commandes"
set var_listeCommandes(help,usage) "help"

set var_listeCommandes(help) "quit"
set var_listeCommandes(help,desc) "Quitte le chat"
set var_listeCommandes(help,usage) "quit"

set var_listeCommandes(me) "me"
set var_listeCommandes(me,desc) "Insere votre pseudo"
set var_listeCommandes(me,usage) "me"

set var_listeCommandes(nick) "nick"
set var_listeCommandes(nick,desc) "Change votre pseudo"
set var_listeCommandes(nick,usage) "nick <Votre Pseudo>"

set var_listeCommandes(list) "list"
set var_listeCommandes(list,desc) "Affiche la liste des salons"
set var_listeCommandes(list,usage) "list"

set var_listeCommandes(add) "add"
set var_listeCommandes(add,desc) "Ajout d'un salon"
set var_listeCommandes(add,usage) "add <nom du salon>"

set var_listeCommandes(debug) "debug"
set var_listeCommandes(debug,desc) "Lance la console de debug"
set var_listeCommandes(debug,usage) "debug"

################################################################################
# Execution des intructions passees en ligne de commande
################################################################################
proc proc_executionCommande { param_commande param_typeCommande param_paramCommande } {
	# Liste des commandes
	global var_listeCommandes
	
	set param_exist [string compare $param_paramCommande ""]

	switch $param_typeCommande {
	
		"add" {
			if { $param_exist == 1 } {
			
				regexp {[^a-zA-Z0-9\s]} $param_paramCommande trouve
	
				if { [info exist trouve] == 1 } {
					proc_affichageErreur "Le nom fourni n'est pas correct, les caracteres autorises sont les lettre, les chiffres et les espaces"
				} else {
					proc_creationSalon $param_paramCommande
					proc_updateListeSalons
					# Recupere la liste des salons via sa variable globale
					set var_listeSalons [proc_getListeIdsSalons]
					#on cherche l'id du nouveau salon dans la frame
					set cpt 0
					foreach var_idSalon $var_listeSalons {
						if { [proc_getSalonNom $var_idSalon] == $param_paramCommande } {
							break;
						}
						set cpt [expr $cpt+1]
					}	
					#on clear la selection de la listbox
					.content.left.frameSalons.listeSalons selection clear 0 [expr [.content.left.frameSalons.listeSalons index end]-1]
					#cpt contenant notre id, on va demander a se connecter a ce salon
					.content.left.frameSalons.listeSalons selection set $cpt $cpt
					callback_connexionSalon
					
				}
			}	else {
				proc_affichageInfo $var_listeCommandes(add,usage)
				return -1
			}
		}
		
		"list" {
			set var_listeSalons [proc_getListeIdsSalons]
			set var_liste ""
			foreach var_idSalon $var_listeSalons  {
				set var_liste "$var_liste\n[proc_getSalonNom $var_idSalon]"
			}
			proc_affichageInfo $var_liste
		}
		
		
		"me" {
			regsub "/me" $param_commande [proc_getMonPseudo] var_message
			proc_envoiMessage $var_message
		}
		
		"nick" {
			
			if { $param_exist == 1 } {
				regexp {[^a-zA-Z0-9\s]} $param_paramCommande trouve
				if { [info exist trouve] == 1 } {
					proc_affichageErreur "Le pseudo fourni n'est pas correct, les caracteres autorises sont les lettre, les chiffres et les espaces"
				}
				proc_setMonPseudo $param_paramCommande
			}	else {
				proc_affichageInfo $var_listeCommandes(nick,usage)
				return -1
			}
			# penser a envoyer le nouveau pseudo
		}
		
		"debug" {
			proc_CreerDebug
		}
		
		"quit" {
			exit
		}
		
		"help" {
			proc_affichageAide
		}
		
		default {
			proc_affichageInfo "Commande inconnue\n\n [ proc_listeCommandes ]"
			return -1
		}
	}
	
	return 0
}

################################################################################
# Separation des messages a envoyer sur le reseau des commandes
################################################################################
proc proc_gestionCommande { param_commande } {
	# Recupere les differents champs de la commande si commande il y a
	regexp {^/([a-zA-Z]*)\s?(.*)} $param_commande trouve var_typeCommande var_paramCommande
	
	return [proc_executionCommande $param_commande $var_typeCommande $var_paramCommande]
}

################################################################################
# Affiche la liste des commandes
################################################################################
proc proc_affichageAide { } {
	proc_affichageInfo [ proc_listeCommandes ]
}

################################################################################
# Retourne une chaine contenant la liste des commandes disponibles
################################################################################
proc proc_listeCommandes { } {
	# Liste des commandes
	global var_listeCommandes
	
	set var_liste ""
	
	foreach var_commande [array names var_listeCommandes -regexp {^[^,]*$}]  {
		set var_liste "$var_liste $var_commande:$var_listeCommandes($var_commande,desc)\n\t$var_listeCommandes($var_commande,usage)\n\n"
	}
	
	return $var_liste
}

